#ifndef _CAJA_H_
#define _CAJA_H_


struct Caja{
    /// Posición horizontal y vertical
    float x, y;

    /// Alto y ancho
    float w, h;

    float derecha(){ return x + w; }
    float abajo(){ return y + h; }

    bool colisionaCon(Caja & B){
        if(x > B.x + B.w || B.x > x + w)
            return false;

        if(y > B.y + B.h || B.y > y + h)
            return false;

        return true;
    }
};

#define BLOQUE_VACIO 0
#define BLOQUE_NARANJA 1
#define BLOQUE_AZUL 2
#define BLOQUE_VERDE 3
#define BLOQUE_ROJO 4
#define BLOQUE_AMARILLO 5

struct Bloque : public Caja{
  
    int tipo;

    Bloque(){
        w = h = 48;
        tipo = BLOQUE_VACIO;
    }

    int tocado(Caja & B){
        if(colisionaCon(B)){
            int up, left, right, down;
            up = left = right = down = 0;
        
            if(B.x < x && x < B.derecha() && B.derecha() < derecha()){
                left = x - B.x;
            }

            if(x < B.x && B.x < derecha() && derecha() < B.derecha()){
                right = B.derecha() - derecha();
            }

            if(B.y < y && y < B.abajo() && B.abajo() < abajo()){
                up = y - B.y;
            }

            if(y < B.y && B.y < abajo() && abajo() < B.abajo()){
                down = B.abajo() - abajo();
            }

            int horizontal = (left > right)? left : right;
            int vertical = (up > down) ? up : down;

            return 1 + (int)(horizontal > vertical);

        }
        return 0; 
    }
};


#endif /* _CAJA_H_ */
